【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

您所在的位置:网站首页 stm32 ad7606 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

#【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)| 来源: 网络整理| 查看: 265

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

第35章       STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

本章节为大家讲解FSMC总线驱动数模转换器AD7606,实战性较强。

35.1 初学者重要提示

35.2 ADC结构分类

35.3 AD7606硬件设计

35.4 AD7606关键知识点整理(重要)

35.5 AD7606的FSMC接口硬件设计

35.6 AD7606的FSMC接口驱动设计

35.7 AD7606板级支持包(bsp_fsmc_ad7606)

35.8 J-Scope实时展示AD7606采集数据说明

35.9 AD7606驱动移植和使用

35.10 实验例程设计框架

35.11 实验例程说明(MDK)

35.12 实验例程说明(IAR)

35.13 总结

 

 

35.1 初学者重要提示   AD7606 的配置很简单,它没有内部寄存器,量程范围和过采样参数是通过外部IO控制的,采样速率由MCU或DSP提供的脉冲频率控制。   AD7606必须使用单5V供电。而AD7606和MCU之间的通信接口电平由VIO(VDRIVE)引脚控制。也就是说VIO必须接单片机的电源,可以是3.3V也以是5V(范围2.3V – 5V)。   正确的理解过采样,比如我们设置是1Ksps采样率,64倍过采样。意思是指每次采样,AD7606会采样64次数据并求平均,相当于AD7606以64Ksps进行采样的,只是将每64个采样点的值做了平均,用户得到的值就是平均后的数值。因此,如果使用AD7606最高的200Ksps采样率,就不可以使用过采样了。   STM32驱动AD7606配合J-Scope实时输出,效果绝了,堪比示波器http://www.armbbs.cn/forum.php?mod=viewthread&tid=97393 。使用方法详解本章节35.8小节。   本章配套例子的串口数据展示推荐使用SecureCRT,因为数据展示做了特别处理,方便采集数据在串口软件同一个位置不断刷新。   AD7606数据手册,模块原理图(通用版)和接线图都已经放到本章教程配置例子的Doc文件里。   ADC 的专业术语诠释文档,推荐大家看看:http://www.armbbs.cn/forum.php?mod=viewthread&tid=89414 。   测试本章配套例子前重要提示:   测试时,务必使用外置电源为开发板供电,因为AD7606需要5V供电电压。板子上插入AD7606模块时,注意对齐。   板子上电后,默认是软件定时采集,0.5秒一次,适合串口展示数据。   如果需要使用J-Scope实时展示采集的波形效果,需要按下K2按键切换到FIFO模式。   如果使用的JLINK速度不够快,导致J-Scope无法最高速度实时上传,可以使用摇杆上下键设置过采样来降低上传速度。   默认情况下,程序仅上传了AD7606通道1采集的数据。 35.2 ADC结构分类

这里将六种DAC结构为大家做个普及。注,这些知识翻译自美信和TI的英文技术手册。

 

35.2.1 SAR ADC(逐次逼近型)

逐次逼近型ADC通常是中高分辨率的首选架构,采样速率通常低于5Msps。SAR ADC最常见的分辨率范围是8位到20位,并具有低功耗和小尺寸的特点。这种组合使其非常适合各种应用,例如自动测试设备,电池供电的设备,数据采集系统,医疗仪器,电机和过程控制,工业自动化,电信,测试和测量,便携式系统,高速闭环系统和窄带接收器。

35.2.2 Sigma-Delta ADC

Sigma-delta ADC主要用于低速应用中,该应用需要通过过采样来权衡速度和分辨率,然后进行滤波以降低噪声。24位sigma-delta转换器用于自动化测试设备,高精度便携式传感器,医疗和科学仪器以及地震数据采集等应用中。

35.2.3 Integrating ADC

集成ADC提供高分辨率,并且可以提供良好的线路频率和噪声抑制。集成架构提供了一种新颖且直接的方法,可将低带宽模拟信号转换为数字表示形式。这些类型的转换器通常包括用于LCD或LED显示器的内置驱动器,并且在许多便携式仪器应用中都可以找到,包括数字面板表和数字万用表。

35.2.4 FLASH ADC

Flash ADC是将模拟信号转换为数字信号的最快方法。它们适用于需要非常大带宽的应用。然而,闪存转换器功率高,具有相对较低的分辨率,并且可能非常昂贵。这将它们限制在通常无法以其他任何方式解决的高频应用中。示例包括数据采集,卫星通信,雷达处理,示波器和高密度磁盘驱动器。

35.2.5 Pipelined ADC

流水线ADC已成为最受欢迎的ADC体系结构,其采样率从每秒几兆采样(MS / s)到最高100MS / s +,分辨率为8至16位。它们提供的分辨率和采样率,可覆盖各种应用,包括CCD成像,超声医学成像,数字接收器,基站,数字视频(例如HDTV),xDSL,电缆调制解调器和快速以太网。

35.2.6 Two Step ADC

两步ADC也称为子范围转换器,有时也称为多步或half flash(比Flash架构慢)。这是Flash ADC和流水线ADC的交叉点。与Flash ADC相比,可以实现更高的分辨率或更小的裸片尺寸。

35.3 AD7606硬件设计

这里将开发板上的AD7606硬件接口,普通型AD7606模块,屏蔽型AD7606模块和磁耦高速隔离型AD7606模块为大家做个说明。

AD7606的原理图下载:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=97547 。

35.3.1 AD7606硬件接口

V5板子上AD7606模块的插座的原理图如下:

 

实际对应开发板的位置如下:

 

为了方便大家更好的理解接线,下面是框图:

 

模块引脚说明:

  OS2 OS1 OS2 :

组合状态选择过采样模式。

  000表示无过采样,最大200Ksps采样速率。   001表示2倍过采样, 也就是硬件内部采集2个样本求平均。   010表示4倍过采样, 也就是硬件内部采集4个样本求平均。   011表示8倍过采样, 也就是硬件内部采集8个样本求平均。   100表示16倍过采样, 也就是硬件内部采集16个样本求平均。   101表示32倍过采样, 也就是硬件内部采集32个样本求平均。   110表示64倍过采样, 也就是硬件内部采集64个样本求平均。

过采样倍率越高,ADC转换时间越长,可得到的最大采样频率就越低。

  CVA,CVB :

启动AD转换的控制信号。CVA决定1-4通道,CVB决定5-8通道。2个信号可以错开短暂的时间。一般情况可以将CVA,CVB并联在一起。

  RAGE :

量程范围选择。0表示正负5V, 1表示正负10V。

  RD :

读信号。

  RST :

复位信号。

  BUSY :

忙信号。

  CS :

片选信号。

  FRST :

第1个通道样本的指示信号。【注,此引脚可以省略不使用】

  VIO :

通信接口电平。

  DB0-DB15 :

数据总线。

 

如果采用SPI接口方式,接线框图如下:

 

35.3.2 AD7606模块(通用版)

产品规格:

1、 16bit分辨率,内置基准,单5V供电。

2、 8路模拟输入,阻抗1M欧姆。【无需负电源,无需前端模拟运放电路,可直接接传感器输出】

3、 输入范围可以选择正负5V或者正负10V,可通过IO控制量程。

4、 最大采样频率 200Ksps,支持8档过采样设置(可以有效降低抖动)。

5、 通信接口支持SPI或16位总线方式(也支持8位总线,一般用的比较少),接口IO电平可以是5V或3.3V。

重要提示:

1、 AD7606的配置很简单,它没有内部寄存器。量程范围和过采样参数是通过外部IO控制的。采样速率由MCU或DSP提供的脉冲频率控制。

2、 AD7606必须使用单5V供电。

3、 AD7606和MCU之间的通信接口电平由VIO(VDRIVE)引脚控制。也就是说VIO必须接单片机的电源,可以是3.3V也可以是5V。

产品效果:

 

 

 

8080或者SPI接口方式选择

出厂的AD7606模块缺省是8080并行接口,如果用SPI接口模式,需要修改R1、R2电阻配置。

并口模式跳线:R1 悬空(不贴),R2贴10K电阻。

SPI接口模式跳线:R1 贴10K电阻,R2 悬空(不贴)。

 

35.3.3 AD7606模块(屏蔽版)

屏蔽版主要是为了更好的应对复杂的电磁工作,软件代码与非屏蔽版是一样的:

 

 

 

 

 

 

35.3.4 AD7606模块(磁耦高速隔离)

该款ADC模块采用磁耦隔离技术隔离SPI通信接口,采用DC-DC隔离电源模块隔离供电电源。高速SPI接口,ADC主芯片采用AD7606芯片。8通道200KHz采样。量程和滤波设置通过短路焊点设置。

产品规格:

模拟通道 : 8路同步采集。

采样频率 : 最大200KHz。

ADC分辨率 : 16bit。

输入量程 : 正负5V或正负10V (通过焊点切换)。

滤波设置 : 0 - 64 共7级硬件均值滤波。

供电电压 : 5.0V,  耗电最大50mA。

通信接口 : SPI,最大时钟频率 16MHz。

接口电平 : 3.3V 或 5V  (3.3V时,耗电15mA)。

产品特点:

1、电源隔离,隔离电压1500V。

2、SPI通信接口隔离,高速磁耦隔离技术。

3、短路点切换量程和过采样(滤波)参数。

4、体积小,2.0mm间距排针,节约主板面积。

产品效果:

 

 

引脚定义和接线图:

 

 

 

35.4 AD7606关键知识点整理(重要)

驱动AD7606需要对下面这些知识点有个认识。

35.4.1 AD7606基础信息   支持8通道同步采样,每个通道最高200Ksps,16bit分辨率。   真双极模拟输入范围:±10V、±5V。   5V单模拟电源,VDRIVER支持2.3V到5V。   完全集成的数据采集解决方案:   模拟输入钳位保护,可以耐受±16.5V的电压。   具有1MΩ模拟输入阻抗的输入缓冲器。   二阶抗混叠模拟滤波器。   片内精密基准电压及缓冲。   通过数字滤波器,提供过采样功能。   灵活的并行/串行即可,支持SPI/QSPI/MICROWIRE/DSP等。   性能   模拟输入通道提供7KV ESD。   95.5dB SNR,-107dB THD,±0.5 LSB INL,±0.5 LSB DNL。   低功耗:100mW。   待机功耗:25mW。

 

35.4.2 AD7606常用引脚的作用

AD7606的封装形式:

 

 

这里把常用的几个引脚做个说明:

  AVcc

模拟电源电压,4.75V到5.25V。这是内部前端放大器和ADC内核的电源电压。应将这些电压引脚去偶接AGND。

  AGND

模拟地,这些引脚是AD7606上所有模拟电路的接地基准点。所有模拟输入信号和外部基准信号都应参考这些引脚。

  OS2 OS1 OS2 :

组合状态选择过采样模式。

  000表示无过采样,最大200Ksps采样速率。   001表示2倍过采样, 也就是硬件内部采集2个样本求平均。   010表示4倍过采样, 也就是硬件内部采集4个样本求平均。   011表示8倍过采样, 也就是硬件内部采集8个样本求平均。   100表示16倍过采样, 也就是硬件内部采集16个样本求平均。   101表示32倍过采样, 也就是硬件内部采集32个样本求平均。   110表示64倍过采样, 也就是硬件内部采集64个样本求平均。

过采样倍率越高,ADC转换时间越长,可得到的最大采样频率就越低。

  CONVSTA,CONVSTB :

启动AD转换的控制信号。CONVSTA决定1-4通道,CONVSTB决定5-8通道。2个信号可以错开短暂的时间。一般情况可以将CVA,CVB并联在一起。

  RAGE :

量程范围选择。0表示正负5V, 1表示正负10V.

  RD /SCL:

读信号,低电平有效。

  RESET

复位信号。

  BUSY :

CONVST A和CONVST B均达到上升沿后,此引脚变为逻辑高电平,表示转换过程已经开始,BUSY输出保持高电平,直到所有通道的转换过程完成为止。BUSY下降沿表示转换数据正被锁存至输出数据寄存器,此时用户就可以读取数据。

  CS :

片选信号,低电平有效。

  FRST :

第1个通道样本的指示信号。【注,此引脚可以省略不使用】

  VDriver:

通信接口电平。

  DB0-DB15 :

数据总线。

  REF SELECT

内部/外部基准电压选择。如果设置此引脚设为逻辑高电平,使用内部基准电压。如果此引脚设为逻辑低电平,则内部基准电压禁止,必须将外部基准电压加到REFIN/REFOUT引脚。

  REFIN/REFOUT

基准电压输入(REFIN)/基准电压输出(REFOUT)引脚,如果REF SELECT引脚设置为逻辑高电平,此引脚将提供2.5V片内基准电压供外部使用。或者可以将REF SELECT引脚设置为逻辑低电平将禁止用内部基准电压。

  V1到V8

模拟输入,此引脚为单端模拟输入,此通道的模拟输入范围由RANGE引脚决定。

  V1GND到V8GND

模拟输入接地引脚,这些引脚与模拟输入引脚V1到V8对应,所有模拟输入AGND引脚都应连接到系统的AGND平面。

35.4.3 AD7606输出电压计算公式

AD7606的计算公式如下:

 

采用二进制补码(其实就是16bit有符号数,将转换结果定义为int16_t即可),因为AD7606支持正负压采集。

  VIN

AD7606采集到的电压值范围-32768到32767。

  REF

一般使用内部基准,即2.5V。

35.4.4 AD7606时序图

了解时序参数是驱动AD7606能否成功的关键,我们这里对几个重要的参数做个说明。

1、AD7606的CONVST转换时序(转换之后读取数据):

 

  t5

CONVST A和CONVST B上升沿之间最大允许的延迟时间。一般我们是用一根控制线同时控制CONVST A和CONVST B,因此可以不用管这个时间。

  tCYCLE

并行模式,转换后并读取数据的最大值是5us,即最高支持的时钟速度是20MHz及其以上。

  tCONV

转换时间。

 

  t3

最短的CONVST A/B电平脉冲,最小值25ns。

  t4

BUSY下降沿到CS下降沿设置时间,最小值0ns,所以可以忽略。

 

 2、AD7606的并行驱动模式有两种时序图,一个是独立的CS片选和RD读信号时序图:

 

  t8

CS到RD的设置时间,最小值是0ns,可以忽略。

  t10

RD读信号的低电平脉冲宽度,通信电压不同,时间不同。对于STM32来说,FMC通信电平一般是3.3V,即最小值21ns。

 

  t11

RD高电平脉冲宽度,最小值15ns。

  t9

CS到RD保持时间,最小值0ns,可以忽略。

  t13到t17

这几个参数了解下即可:

 

 3、另一个是CS片选和RD相连的方式:

 

这个时序里面最重要的是t12。

  t12

CS和RD的高电平脉冲宽度,最小值22ns。

 

第2个和第3个时序图的主要区别是连续读取8路数据时,一个CS信号是全程低电平,另一个CS信号是与RD信号同步,每读取完一路,拉高一次。

35.4.5 AD7606的过采样

使用过采样可以改善SNR信噪比。SNR性能随着过采样倍率提高而改善,具体参数如下:

 

通过这个表,我们可以方便的了解不同过采样下的信噪比,3dB带宽时的频率和最高支持的采样率。

注意正确的理解过采样,比如我们设置是1Ksps采样率,64倍过采样。意思是指每次采样,AD7606会采样64次数据并求平均,相当于AD7606以64Ksps进行采样的,只是将每64个采样点的值做了平均,用户得到的值就是平均后的数值。因此,如果使用AD7606最高的200Ksps采样率,就不可以使用过采样了。

35.5 AD7606的FMC接口硬件设计

FMC硬件接口涉及到的知识点稍多,下面逐一为大家做个说明。

35.5.1 FMC的块区分配

FMC总线可操作的地址范围0x60000000到0x9FFFFFFF,具体的框图如下:

 

从上面的框图可以看出,NOR/PSRAM/SRAM块区有4个片选NE1,NE2,NE3和NE4,但由于引脚复用,部分片选对应的引脚要用于其他功能,而且要控制的总线外设较多,导致片选不够用。因此需要增加译码器。

35.5.2 译码器及其地址计算

有了前面的认识之后再来看下面的译码器电路:

 

SN74LVC1G139APWR是双2-4线地址译码器,也就是带了两个译码器。下面是139的真值表和引脚功能:

 

 

通过上面的原理图和真值表就比较好理解了,真值表的输出是由片选FSMC_NE3,FSMC_NE4和地址线FSMC_A20、FSMC_A21控制。

FMC_NE3 输出低电平:

  FMC_A21(B),FMC_A20(A) = 00时,1Y0输出的低电平,选择的是SRAM。   FMC_A21(B),FMC_A20(A) = 01时,1Y1输出的低电平,未使用。   FMC_A21(B),FMC_A20(A) = 10时,1Y2输出的低电平,选择的是DM9000。   FMC_A21(B),FMC_A20(A) = 11时,1Y3输出的低电平,未使用。

FMC_NE4 输出低电平:

  FMC_A21(B),FMC_A20(A) = 00时,1Y0输出的低电平,选择的是TFT LCD。   FMC_A21(B),FMC_A20(A) = 01时,1Y1输出的低电平,选择的是OLED。   FMC_A21(B),FMC_A20(A) = 10时,1Y2输出的低电平,选择的是AD7606。   FMC_A21(B),FMC_A20(A) = 11时,1Y3输出的低电平,未使用。

然后我们再计算译码器的地址,注意,这里地址的计算都是按照FMC的16bit访问模式计算的,因为我们的V5程序中是将NE3和NE4对应的FMC配置为16bit模式了。

具体FMC的16bit访问模式和8bit访问模式的区别看下图。

 

12bit模式下,我们计算A20和A21的时候,实际上需要按HADDR21和HADDR22计算的。

如果来算NE4 + HADDR21 + HADDR22的四种组合地址就是如下:

NE4 + HADDR21+ HADDR22 = 0x6C000000 +  0BSRR = OS0_PIN #define OS0_0() OS0_GPIO->BSRR= ((uint32_t)OS0_PIN BSRR = OS1_PIN #define OS1_0() OS1_GPIO->BSRR = ((uint32_t)OS1_PIN BSRR = OS2_PIN #define OS2_0() OS2_GPIO->BSRR = ((uint32_t)OS2_PIN BSRR = RANGE_PIN #define RANGE_0() RANGE_GPIO->BSRR = ((uint32_t)RANGE_PIN BSRR = RESET_PIN #define RESET_0() RESET_GPIO->BSRR = ((uint32_t)RESET_PIN = ADC_FIFO_SIZE) { g_tAdcFifo.usWrite = 0; } if (g_tAdcFifo.usCount 0) { g_tAD7606.ucOS--; } AD7606_SetOS(g_tAD7606.ucOS); ucRefresh = 1; /* 如果是FIFO模式,*/ if(ucFifoMode == 1) { /* 启动当前过采样下最高速度 */ AD7606_StartRecord(AD7606_SampleFreq[g_tAD7606.ucOS]); } break; default: /* 其他的键值不处理 */ break; } } } } 35.12          实验例程说明(IAR)

配套例子:

V5-016_AD7606的FMC总线驱动方式实现(8通道同步采样, 16bit, 正负10V)

实验目的:

学习AD7606的FMC驱动方式实现。

重要提示:

板子上电后,默认是软件定时采集,0.5秒一次,适合串口展示数据。 如果需要使用J-Scope实时展示采集的波形效果,需要按下K2按键切换到FIFO模式。 如果使用的JLINK速度不够快,导致J-Scope无法最高速度实时上传,可以使用摇杆上下键设置过采样来降低上传速度。 默认情况下,程序仅上传了AD7606通道1采集的数据。 串口数据展示推荐使用SecureCRT,因为数据展示做了特别处理,方便采集数据在串口软件同一个位置不断刷新。

实验内容:

1、AD7606的FMC驱动做了两种采集方式

(1)软件定时获取方式,适合低速查询获取。

(2)FIFO工作模式,适合8路实时采集,支持最高采样率200Ksps。

2、数据展示方式:

(1)软件查询方式,数据通过串口打印输出。

(2)FIFO工作模式,数据通过J-Scope实时输出。

(3)J-Scope的实时输出方法请看V5板子用户手册对应的AD7606章节。

3、将模拟输入接地时,采样值是0左右。

4、模拟输入端悬空时,采样值在某个范围浮动(这是正常的,这是AD7606内部输入电阻导致的浮动电压)。

5、出厂的AD7606模块缺省是8080 并行接口。如果用SPI接口模式,需要修改 R1 R2电阻配置。

6、配置CVA CVB 引脚为PWM输出模式,周期设置为需要的采样频率,之后MCU将产生周期非常稳定的AD转换信号。

实验操作:

启动一个自动重装软件定时器,每100ms翻转一次LED2。 K1键       : 切换量程(5V或10V)。 K2键       : 进入FIFO工作模式。 K3键       : 进入软件定时采集模式。 摇杆上下键 : 调节过采样参数。

上电后串口打印的信息:

波特率 115200,数据位 8,奇偶校验位无,停止位 1。

 

J-Scope波形效果:

 

模块插入位置: 

程序设计:

  系统栈大小分配:

 

  硬件外设初始化

硬件外设的初始化是在 bsp.c 文件实现:

/* ********************************************************************************************************* * 函 数 名: bsp_Init * 功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void bsp_Init(void) { /* STM32F407 HAL 库初始化,此时系统用的还是F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。 - 设置NVIV优先级分组为4。 */ HAL_Init(); /* 配置系统时钟到168MHz - 切换使用HSE。 - 此函数会更新全局变量SystemCoreClock,并重新配置HAL_InitTick。 */ SystemClock_Config(); /* Event Recorder: - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。 - 默认不开启,如果要使能此选项,务必看V5开发板用户手册第8章 */ #if Enable_EventRecorder == 1 /* 初始化EventRecorder并开启 */ EventRecorderInitialize(EventRecordAll, 1U); EventRecorderStart(); #endif bsp_InitKey(); /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */ bsp_InitTimer(); /* 初始化滴答定时器 */ bsp_InitUart(); /* 初始化串口 */ bsp_InitExtIO(); /* 初始化扩展IO */ bsp_InitLed(); /* 初始化LED */ BEEP_InitHard(); /* 初始化蜂鸣器 */ /* 针对不同的应用程序,添加需要的底层驱动模块初始化函数 */ bsp_InitAD7606(); /* 配置AD7606所用的GPIO */ }

  主功能:

主程序实现如下操作:

  启动一个自动重装软件定时器,每100ms翻转一次LED2。   K1键       : 切换量程(5V或10V)。   K2键       : 进入FIFO工作模式。   K3键       : 进入软件定时采集模式。   摇杆上下键 : 调节过采样参数。 /* ********************************************************************************************************* * 函 数 名: main * 功能说明: c程序入口 * 形 参: 无 * 返 回 值: 错误代码(无需处理) ********************************************************************************************************* */ int main(void) { bsp_Init(); /* 硬件初始化 */ PrintfLogo(); /* 打印例程名称和版本等信息 */ DemoFmcAD7606(); /* AD7606测试 */ } /* ********************************************************************************************************* * 函 数 名: DemoFmcAD7606 * 功能说明: AD7606测试 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void DemoFmcAD7606(void) { uint8_t ucKeyCode; uint8_t ucRefresh = 0; uint8_t ucFifoMode; sfDispMenu(); /* 打印命令提示 */ ucFifoMode = 0; /* AD7606进入普通工作模式 */ ucRefresh = 0; /* 数据在串口刷新的标志 */ AD7606_SetOS(AD_OS_NO); /* 无过采样 */ AD7606_SetInputRange(1); /* 0表示输入量程为正负5V, 1表示正负10V */ AD7606_StartConvst(); /* 启动1次转换 */ bsp_StartAutoTimer(0, 500); /* 启动1个500ms的自动重装的定时器 */ bsp_StartAutoTimer(3, 200); /* 启动1个200ms的自动重装的定时器 */ /* 配置通道1,上行配置 默认情况下,J-Scope仅显示1个通道。 上传1个通道的波形,配置第2个参数为JScope_i2 上传2个通道的波形,配置第2个参数为JScope_i2i2 上传3个通道的波形,配置第2个参数为JScope_i2i2i2 上传4个通道的波形,配置第2个参数为JScope_i2i2i2i2 上传5个通道的波形,配置第2个参数为JScope_i2i2i2i2i2 上传6个通道的波形,配置第2个参数为JScope_i2i2i2i2i2i2 上传7个通道的波形,配置第2个参数为JScope_i2i2i2i2i2i2i2 上传8个通道的波形,配置第2个参数为JScope_i2i2i2i2i2i2i2i2 */ SEGGER_RTT_ConfigUpBuffer(1, "JScope_i2", buf, 20480, SEGGER_RTT_MODE_NO_BLOCK_SKIP); while(1) { bsp_Idle(); /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */ /* 判断定时器超时时间 */ if (bsp_CheckTimer(3)) { /* 每隔100ms 进来一次 */ bsp_LedToggle(2); } if (ucRefresh == 1) { ucRefresh = 0; /* 处理数据 */ AD7606_Mak(); /* 打印ADC采样结果 */ AD7606_Disp(); } if (ucFifoMode == 0) /* AD7606 普通工作模式 */ { if (bsp_CheckTimer(0)) { /* 每隔500ms 进来一次. 由软件启动转换 */ AD7606_ReadNowAdc(); /* 读取采样结果 */ AD7606_StartConvst(); /* 启动下次转换 */ ucRefresh = 1; /* 刷新显示 */ } } else { /* 在FIFO工作模式,bsp_AD7606自动进行采集,数据存储在FIFO缓冲区。 结果可以通过下面的函数读取: uint8_t AD7606_ReadFifo(uint16_t *_usReadAdc) 大家可以将数据保存到SD卡,或者保存到外部SRAM。 本例未对FIFO中的数据进行处理,进行打印当前最新的样本值和J-Scope的实时输出展示。 如果主程序不能及时读取FIFO数据,那么 AD7606_FifoFull() 将返回真。 8通道200K采样时,数据传输率 = 200 000 * 2 * 8 = 3.2MB/S */ if (bsp_CheckTimer(0)) { ucRefresh = 1; /* 刷新显示 */ } } /* 按键检测由后台systick中断服务程序实现,我们只需要调用bsp_GetKey读取键值即可。这个函数不会 等待按键按下,这样我们可以在while循环内做其他的事情 */ ucKeyCode = bsp_GetKey(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */ if (ucKeyCode != KEY_NONE) { switch (ucKeyCode) { case KEY_DOWN_K1: /* K1键按下 切换量程 */ if (g_tAD7606.ucRange == 0) { AD7606_SetInputRange(1); } else { AD7606_SetInputRange(0); } ucRefresh = 1; break; case KEY_DOWN_K2: /* K2键按下 */ ucFifoMode = 1; /* AD7606进入FIFO工作模式 */ g_tAD7606.ucOS = 1; /* 无过采样 */ AD7606_StartRecord(AD7606_SampleFreq[g_tAD7606.ucOS]); /* 启动100kHz采样速率 */ AD7606_SetOS(g_tAD7606.ucOS); /* 设置无过采样 */ printf("\33[%dA", (int)1); /* 光标上移n行 */ printf("AD7606进入FIFO工作模式 (200KHz 8通道同步采集)...\r\n"); break; case KEY_DOWN_K3: /* K3键按下 */ AD7606_StopRecord(); /* 停止记录 */ ucFifoMode = 0; /* AD7606进入普通工作模式 */ g_tAD7606.ucOS = 0; /* 无过采样 */ AD7606_SetOS(g_tAD7606.ucOS); printf("\33[%dA", (int)1); /* 光标上移n行 */ printf("AD7606进入普通工作模式(0.5s定时8通道同步采集)...\r\n"); break; case JOY_DOWN_U: /* 摇杆UP键按下 */ if (g_tAD7606.ucOS < 6) { g_tAD7606.ucOS++; } AD7606_SetOS(g_tAD7606.ucOS); /* 如果是FIFO模式,*/ if(ucFifoMode == 1) { /* 启动当前过采样下最高速度 */ AD7606_StartRecord(AD7606_SampleFreq[g_tAD7606.ucOS]); } ucRefresh = 1; break; case JOY_DOWN_D: /* 摇杆DOWN键按下 */ if (g_tAD7606.ucOS > 0) { g_tAD7606.ucOS--; } AD7606_SetOS(g_tAD7606.ucOS); ucRefresh = 1; /* 如果是FIFO模式,*/ if(ucFifoMode == 1) { /* 启动当前过采样下最高速度 */ AD7606_StartRecord(AD7606_SampleFreq[g_tAD7606.ucOS]); } break; default: /* 其他的键值不处理 */ break; } } } 35.13   总结

本章节涉及到的知识点非常多,实战性较强,需要大家稍花点精力去研究。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3